<?php

namespace app\command;

use think\Db;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\console\input\Option;

class DropTables extends Command
{
    protected function configure()
    {
        $this->setName('migrate:drop')
            ->setDescription('删除所有数据表和函数')
            ->addOption('yes', 'y', Option::VALUE_NONE, '是否确认')
            ->setHelp(sprintf('%删除所有数据表和函数%s', PHP_EOL, PHP_EOL));
    }

    protected function execute(Input $input, Output $output)
    {
        // 连接数据库
        $tables = array_values(array_map(function ($item) {
            return array_values($item)[0];
        }, Db::query('SHOW TABLES')));

        // 再次确认是否清空数据库
        $confirm = $input->getOption('yes');
        if (!$confirm) {
            if (!$output->confirm($input, '确认清空数据库? [y]/n')) {
                $output->writeln('操作已经取消!');
                return;
            } else {
                $confirm = true;
            }
        }

        // 清空数据表
        foreach ($tables as $t) {
            $output->writeln("正在删除数据表: $t");
            Db::execute("DROP TABLE `$t`"); // 由于在控制台执行，就没有使用绑定参数的模式
        }

        $output->writeln("清空完成.");
    }
}
